/**
 * 用户数据
 */
import { defineStore } from 'pinia'

const state = () => ({
  /**
   * 微信 code
   * @property {String} value - code 值
   * @property {String} at - 过期时间戳
   */
  code: {
    value: '', // code 值
    at: ''
  },

  /**
   * 用户登录凭证
   * @property {String} token
   */
  token: uni.getStorageSync('USER_TOKEN'),

  /**
   * 用户信息
   * @property {Number} integration - 积分
   */
  info: uni.getStorageSync('USER_INFO'),

  loginToast: false
})

const getters = {
}

const actions = {
  // 设置用户登录凭证 token
  setToken (token) {
    uni.setStorageSync('USER_TOKEN', token)
    this.token = token
  },

  // ！！！ 不能直接设置用户信息
  // 获取用户信息接口 openId 不会返回，登录后直接设置会失去 openId
  clearInfo () {
    uni.setStorageSync('USER_INFO', null)
    this.info = null
  },

  // 更新用户信息，该方法会将新老值合并后再保存
  updateInfo (info) {
    const userInfo = Object.assign({}, this.info, info)
    uni.setStorageSync('USER_INFO', userInfo)
    this.info = userInfo
  },

  setCode (code) {
    const at = Date.now() + 300000
    const data = {
      value: code,
      at: code ? at : ''
    }

    this.code = data
  },

  logout () {
    this.setCode('')
    this.setToken('')
    this.clearInfo()
  },

  setLoginToast (is) {
    this.loginToast = is
  }
}

export default defineStore(
  'user',
  { state, getters, actions }
)
